#!/usr/bin/python
# -*- coding: UTF-8 -*-

from kpautos.engine.case import Case
from kptest.config.enum import DeviceType, HostType, DeviceUtility


class Bios_Info_Compare_001(Case):
    """
        Name:
            Bios_Info_Compare_001
        Label:
            BIOS版本信息比较
        PreCondition:
            1、BMC正常运行
        TestStep:
            1、带外执行ipmcget -d version查询BIOS版本信息
            2、带内执行dmidecode -t 0查询BIOS版本信息
            3、对比带外带内BIOS版本信息，得到结果A
        ExpectedResult:
            A) Version信息一致
        Parameters:

        Remark:

    """

    # 测试执行前配置等准备操作
    def pre_test_case(self):
        self.device_dut = self.resource.get_device(device_type=DeviceType.Server, utility=DeviceUtility.DUT)
        self.os_host = self.device_dut.get_host(host_type=HostType.HostOS)
        self.cli_api = self.device_dut.get_api(ns_name="BmcCli")

    # 测试步骤
    def procedure(self):
        self.log_step("1、带外执行ipmcget -d version查询BIOS版本信息")
        bios_version_outer = self.cli_api.cli_query_device_version()['Product']['Active_BIOS_Version'].split(')')[-1]
        if not bios_version_outer:
            raise Exception("带外获取BIOS版本信息失败")

        self.log_step("2、带内执行dmidecode -t 0查询BIOS版本信息")
        bios_version_inner = self.os_host.smbios.get_dmidecode('0')['BIOS Information'][0]['Version']
        if not bios_version_inner:
            raise Exception("带内获取BIOS版本信息失败")

        self.log_step("3、对比带外带内BIOS版本信息，得到结果A")
        info = "BIOS版本信息：带外%s，带内%s" % (bios_version_outer, bios_version_inner)
        if bios_version_outer != bios_version_inner:
            raise Exception("带内获取BIOS版本信息失败 \r\n%s" % info)

        self.logger.info("A) Version信息一致 \r\n%s" % info)

    # 测试结束后恢复环境
    def post_test_case(self):
        pass